; COMMAND-LINE: --finite-model-find
; EXPECT: sat
(set-option :incremental false)
(set-info :status sat)
(set-logic AUFLIA)
(declare-sort S1 0)
(declare-sort S2 0)
(declare-sort S3 0)
(declare-sort S4 0)
(declare-sort S5 0)
(declare-sort S6 0)
(declare-sort S7 0)
(declare-sort S8 0)
(declare-sort S9 0)
(declare-sort S10 0)
(declare-sort S11 0)
(declare-sort S12 0)
(declare-sort S13 0)
(declare-sort S14 0)
(declare-sort S15 0)
(declare-sort S16 0)
(declare-sort S17 0)
(declare-sort S18 0)
(declare-fun f1 () S1)
(declare-fun f2 () S1)
(declare-fun f3 (S2 S3) S4)
(declare-fun f4 () S2)
(declare-fun f5 () S3)
(declare-fun f6 () S4)
(declare-fun f7 (S3 S5) S1)
(declare-fun f8 (S6) S5)
(declare-fun f9 () S6)
(declare-fun f10 (S7 S6) S6)
(declare-fun f11 () S7)
(declare-fun f12 (S8 S4) S4)
(declare-fun f13 () S8)
(declare-fun f14 (S10 S3) S3)
(declare-fun f15 (S11 S9) S10)
(declare-fun f16 (S12 S4) S11)
(declare-fun f17 () S12)
(declare-fun f18 (S4 S13) S1)
(declare-fun f19 () S13)
(declare-fun f20 (S4) S1)
(declare-fun f21 () S2)
(declare-fun f22 () S10)
(declare-fun f23 (S3 S9) S1)
(declare-fun f24 (S14 S9) S9)
(declare-fun f25 (S15 S4) S14)
(declare-fun f26 () S15)
(declare-fun f27 () S13)
(declare-fun f28 () S8)
(declare-fun f29 (S16 S9) S3)
(declare-fun f30 (S17 S4) S16)
(declare-fun f31 (S18 S4) S17)
(declare-fun f32 () S18)
(declare-fun f33 () S18)
(declare-fun f34 (S4 S4) S1)
(assert (not (= f1 f2)))
(assert (not (not (= (f3 f4 f5) f6))))
(assert (forall ((?v0 S3)) (=> (= (f7 ?v0 (f8 f9)) f1) (not (= (f3 f4 ?v0) f6))) ))
(assert (= (f7 f5 (f8 (f10 f11 f9))) f1))
(assert (forall ((?v0 S4)) (= (= f6 ?v0) (= ?v0 f6)) ))
(assert (= (f12 f13 f6) f6))
(assert (forall ((?v0 S4)) (= (= f6 (f12 f13 ?v0)) (= ?v0 f6)) ))
(assert (forall ((?v0 S4)) (= (= (f12 f13 ?v0) f6) (= ?v0 f6)) ))
(assert (forall ((?v0 S4) (?v1 S9) (?v2 S3)) (= (f3 f4 (f14 (f15 (f16 f17 ?v0) ?v1) ?v2)) (f3 f4 ?v2)) ))
(assert (= (f18 f6 f19) f1))
(assert (= (f20 f6) f1))
(assert (forall ((?v0 S4)) (= (= (f20 ?v0) f1) (= ?v0 f6)) ))
(assert (forall ((?v0 S3)) (=> (= (f7 ?v0 (f8 f9)) f1) (not (= (f3 f21 ?v0) f6))) ))
(assert (forall ((?v0 S3)) (=> (not (not (= (f3 f21 ?v0) f6))) (=> (not (= (f3 f4 ?v0) f6)) (not (= (f3 f4 (f14 f22 ?v0)) f6)))) ))
(assert (forall ((?v0 S4) (?v1 S4)) (= (= (f12 f13 ?v0) (f12 f13 ?v1)) (= ?v0 ?v1)) ))
(assert (forall ((?v0 S6) (?v1 S9)) (=> (forall ((?v2 S3)) (=> (= (f7 ?v2 (f8 ?v0)) f1) (not (= (f3 f21 ?v2) f6))) ) (= (exists ((?v2 S4)) (forall ((?v3 S3)) (=> (= (f7 ?v3 (f8 (f10 f11 ?v0))) f1) (= (f23 ?v3 (f24 (f25 f26 ?v2) ?v1)) f1)) ) ) (exists ((?v2 S4)) (forall ((?v3 S3)) (=> (= (f7 ?v3 (f8 ?v0)) f1) (= (f23 ?v3 (f24 (f25 f26 ?v2) ?v1)) f1)) ) ))) ))
(assert (forall ((?v0 S4)) (= (f18 (f12 f13 ?v0) f27) f1) ))
(assert (= (f12 f28 f6) f6))
(assert (forall ((?v0 S4) (?v1 S4) (?v2 S9)) (= (f3 f4 (f29 (f30 (f31 f32 ?v0) ?v1) ?v2)) ?v0) ))
(assert (forall ((?v0 S4) (?v1 S4) (?v2 S9)) (= (f3 f4 (f29 (f30 (f31 f33 ?v0) ?v1) ?v2)) ?v0) ))
(assert (= (f18 f6 f27) f1))
(assert (forall ((?v0 S3) (?v1 S4) (?v2 S9)) (=> (not (not (= (f3 f21 ?v0) f6))) (= (= (f23 ?v0 (f24 (f25 f26 ?v1) ?v2)) f1) (= (f23 (f14 f22 ?v0) ?v2) f1))) ))
(assert (forall ((?v0 S4)) (= (= (f34 (f12 f13 ?v0) f6) f1) (= (f34 ?v0 f6) f1)) ))
(assert (forall ((?v0 S4)) (= (= (f34 f6 (f12 f13 ?v0)) f1) (= (f34 f6 ?v0) f1)) ))
(assert (forall ((?v0 S4) (?v1 S4) (?v2 S9) (?v3 S4) (?v4 S4) (?v5 S9)) (not (= (f29 (f30 (f31 f33 ?v0) ?v1) ?v2) (f29 (f30 (f31 f32 ?v3) ?v4) ?v5))) ))
(assert (forall ((?v0 S4) (?v1 S4) (?v2 S9) (?v3 S4) (?v4 S4) (?v5 S9)) (not (= (f29 (f30 (f31 f32 ?v0) ?v1) ?v2) (f29 (f30 (f31 f33 ?v3) ?v4) ?v5))) ))
(assert (forall ((?v0 S4)) (= (f34 ?v0 ?v0) f1) ))
(assert (forall ((?v0 S4) (?v1 S4)) (or (= (f34 ?v0 ?v1) f1) (= (f34 ?v1 ?v0) f1)) ))
(assert (forall ((?v0 S4) (?v1 S4) (?v2 S9) (?v3 S4) (?v4 S4) (?v5 S9)) (= (= (f29 (f30 (f31 f33 ?v0) ?v1) ?v2) (f29 (f30 (f31 f33 ?v3) ?v4) ?v5)) (and (= ?v0 ?v3) (and (= ?v1 ?v4) (= ?v2 ?v5)))) ))
(assert (forall ((?v0 S4) (?v1 S4) (?v2 S9) (?v3 S4) (?v4 S4) (?v5 S9)) (= (= (f29 (f30 (f31 f32 ?v0) ?v1) ?v2) (f29 (f30 (f31 f32 ?v3) ?v4) ?v5)) (and (= ?v0 ?v3) (and (= ?v1 ?v4) (= ?v2 ?v5)))) ))
(assert (forall ((?v0 S4) (?v1 S4) (?v2 S4)) (=> (= (f34 ?v0 ?v1) f1) (=> (= (f34 ?v1 ?v2) f1) (= (f34 ?v0 ?v2) f1))) ))
(assert (forall ((?v0 S4) (?v1 S4)) (=> (= (f34 ?v0 ?v1) f1) (=> (= (f34 ?v1 ?v0) f1) (= ?v0 ?v1))) ))
(check-sat-assuming ( true ))
